<?php
/**
 * @brief AOP插件
 */
class Aop_Plugin extends Yaf_Plugin_Abstract {
    /**
     * 在路由之前被触发，这个钩子里，你可以做url重写等功能
     *
     * @param Yaf_Request_Abstract $request
     * @param Yaf_Response_Abstract $response
     * 
     * @return mixed|void
     */
    public function routerStartup(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
        // TODO
    }

    /**
     * 在路由结束之后被触发，在这个钩子里，你可以做登陆检测等功能
     *
     * @param Yaf_Request_Abstract $request
     * @param Yaf_Response_Abstract $response
     * 
     * @return mixed|void
     */
    public function routerShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
        $objAop = Aop::getInstance();
        $objAop->getAopParser();  //获取AOP列表
        $objAop->runAop('AopBefore'); //触发AopBefore
        $objAop->runAop('AopAround'); //触发AopAround
    }

    /**
     * 在分发循环开始之前被触发
     *
     * @param Yaf_Request_Abstract $request
     * @param Yaf_Response_Abstract $response
     * 
     * @return mixed|void
     */
    public function dispatchLoopStartup(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
        // TODO
    }

    /**
     * 在分发之前被触发
     *
     * @param Yaf_Request_Abstract $request
     * @param Yaf_Response_Abstract $response
     * 
     * @return mixed|void
     */
    public function preDispatch(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
        // TODO
    }

    /**
     * 在分发结束之后被触发
     *
     * @param Yaf_Request_Abstract $request
     * @param Yaf_Response_Abstract $response
     * 
     * @return mixed|void
     */
    public function postDispatch(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
        $objAop = Aop::getInstance();
        $objAop->runAop('AopAfter');  //触发AopAfter
        $objAop->runAop('AopAround'); //触发AopAround
    }

    /**
     * 在分发循环结束之后被触发
     *
     * @param Yaf_Request_Abstract $request
     * @param Yaf_Response_Abstract $response
     * 
     * @return mixed|void
     */
    public function dispatchLoopShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
        // TODO
    }

    /**
     * 在响应之前被触发
     *
     * @param Yaf_Request_Abstract $request
     * @param Yaf_Response_Abstract $response
     * 
     * @return mixed|void
     */
    public function preResponse(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
        // TODO
    }
}
